The use of Forward Error Correction (FEC) techniques in the design of digital communications and storage systems is well known. FEC is used to find and correct limited errors caused by a transport or storage system in order to ensure the validity of the received message without requiring retransmissions. In general, FEC encoding techniques, such as Reed-Solomon (RS) encoding, provide data redundancy by adding extra code symbols to a transmitted message which provide the necessary detection and correction information. The number of redundant symbols is determined by the amount and type of error correction required. RS encoding is an example of a block code where the data to be transmitted are divided into blocks, with each block comprising k symbols of data. An additional r redundancy symbols are then added to each block of k data symbols to form a code word of length n=k+r. The “code rate” of the code refers to the ratio k/n, and is used to express the average amount of data symbols versus the amount of transmitted symbols. Thus, a code rate of 0.8 would indicate that the average over all time intervals T of the ratio of data symbols that were encoded in time interval T to the total number of transmitted symbols in time interval T, is 80%.
In general, the additional redundancy symbols must contain enough information to allow the position of an erroneous information symbol to be located and its value determined. For example, an RS decoder can detect and correct up to r/2 incorrect symbols if there are (r=n−k) redundant symbols in each code word, as one redundant symbol is used to detect and locate each error, and one more redundant symbol is used to identify the precise value of that error. Some symbols that are either known or suspected to be in error or otherwise unreliable may be labeled as “erasures.” The position of each erasure may be provided in advance to the decoder which then ignores the actual value of the erasure and instead reconstructs its value using the redundancy symbols. Since the position of each erasure is known, only one redundant symbol is needed to reconstruct the value of an erasure, and an additional redundant symbol to determine the location of the erasure is not required. In general, if a code word contains E symbols that are erasures whose locations are known and e symbols that are errors with unknown locations, the code word can be correctly decoded provided that (2e+E)≦r. If the locations of all the errors are known to the decoder, the message can be correctly decoded provided that E≦r, thus requiring half the number of redundant symbols needed to correct errors whose locations are not known.
While conventional FEC techniques may be used successfully to correct errors, FEC encoders/decoders generally must be designed in advance with a predetermined ratio of information symbols to redundancy symbols according to the expected quality of the channel over which the data is transmitted. Thus, in order for a single FEC encoder or decoder to be used for multiple data channels of varying quality, a conventional FEC encoder or decoder will either have to be configured to provide sufficient redundancy for the channel with the poorest expected quality, or will have to be continually reconfigured according to the expected quality of the data of each channel to be encoded or decoded. Alternatively, several encoders and decoders may be implemented in parallel, with one encoder and decoder for each channel.
A FEC technique that can accommodate multiple streams of data of varying quality using a single FEC configuration that provides different levels of redundancy would therefore be advantageous.